#ifndef _DFT_PLANS_H_
#define _DFT_PLANS_H_
/**************************************************//*!
 *
 * \file    dft_plans.h
 * \brief   All derived DFT Plans class defination
 *
 * \author  Terence Wu
 * \date    Sep. 2009
 *
 ****************************************************/

#include "ifftgpu.h"

#include <list>

class CTPlan : public Plan
{
    friend class CTSolver;
public:
    CTPlan();
    virtual ~CTPlan();

    virtual void solve();
    virtual void awake(Wakefulness w);
    virtual void print(FILE * fp, int indent = 0);

private:
    int n1, n2;

    Plan * n1plan;
    Plan * n2plan;
};

class DIRPlan : public Plan
{
    friend class DIRSolver;
public:
    DIRPlan();
    virtual ~DIRPlan();

    virtual void solve();
    virtual void awake(Wakefulness w);
    virtual void print(FILE * fp, int indent = 0);

private:
    TwParam twParam;

    int  fftDim;
    std::list<Dim> iDim;
    std::list<Dim> oDim;

};

#endif //_DFT_PLANS_H_